# ---
# title: 540. Single Element in a Sorted Array
# id: problem540
# author: Indigo
# date: 2021-06-23
# difficulty: Medium
# categories: Binary Search
# link: <https://leetcode.com/problems/single-element-in-a-sorted-array/description/>
# hidden: true
# ---
# 
# You are given a sorted array consisting of only integers where every element
# appears exactly twice, except for one element which appears exactly once. Find
# this single element that appears only once.
# 
# **Follow up:** Your solution should run in O(log n) time and O(1) space.
# 
# 
# 
# **Example 1:**
# 
#     
#     
#     Input: nums = [1,1,2,3,3,4,4,8,8]
#     Output: 2
#     
# 
# **Example 2:**
# 
#     
#     
#     Input: nums = [3,3,7,7,10,11,11]
#     Output: 10
#     
# 
# 
# 
# **Constraints:**
# 
#   * `1 <= nums.length <= 10^5`
#   * `0 <= nums[i] <= 10^5`
# 
# 
## @lc code=start
using LeetCode

function single_non_duplicate(nums::Vector{Int})
    i, j = 1, length(nums)
    while i < j
        mid = (i + j) >> 1
        if isodd(mid)
            nums[mid] == nums[mid + 1] ? (i = mid + 2) : (j = mid)
        else
            nums[mid] == nums[mid + 1] ? (j = mid - 1) : (i = mid + 1)
        end
    end
    return nums[i]
end
## @lc code=end
